#include <iostream>
#include <string>
#include <cstring>

int main(){
    using namespace std;
    // 使用new关键字(其实是运算符)分配内存

    // 在C语言中可以使用malloc()函数分配内存,在C++中有一种更好的方式分配内存
    int * pointer1 = new int;
    // new int告诉程序, 需要一个适合于存储int类型的内存,然后会根据类型确定分配多少字节的内存
    // new关键字是在程序运行的过程中开辟存储空间
    
    // 通用的new申请内存的方式是 typeName * pointer = new typeName;
    // 下面是使用new分配空间的例子
    int nights = 1001;
    int * pt = new int;
    *pt = 100;

    cout << "nights's value is :" << nights << endl;

    //使用delete删除数组
    delete pt;      //这句话的意思是,删除对应的数组内存块(这里的内存块必须是通过new创建的块内存)
    // 不要重复delete一个内存指针,C++中未定义这样把这种delete一个已经被清空的指针,有可能导致系统异常!!

    //总之: 不要使用delete来释放一个不是new出来的内存
        // 不要使用delete释放同一个内存块
        // 如果使用new[] 开辟空间,应该使用delete[] 来释放内存
        // 如果使用new为一个实体分配空间,应该使用delete来释放(不加[])
        // 这里delete pt;中pt不会被删除
        

    //如果使用new的过程中没有使用delete进行释放,那么将会产生一个已经被释放的指针(因为作用于规则或者对象的生命周期的原因被释放),
    //被泄露的内存将会在程序的整个生命周期中都将会不可使用!! 如果内存泄漏非常严重的情况下,将会出现内存耗尽,导致程序崩溃, 严重的还会导致系统崩溃!
    return 0;
}